#include"BlockQueue.hpp"
#include<iostream>
#include<pthread.h>
#include<unistd.h>

void *consumer(void *args)
{
    BlockQueue<int> *bq = static_cast<BlockQueue<int>*>(args);
    while(true)
    {
        sleep(1);
        //消费者一直消费
        int data = bq->Pop();
        std::cout<<"消费了一个数据： "<<data<<std::endl;
    }
}

void *productor(void *args)
{
    int data = 1;
    BlockQueue<int> *bq = static_cast<BlockQueue<int>*>(args);
    while(true)
    {       
        //生产者一秒生产一个
        // sleep(1);
        std::cout<<"生产了一个数据："<<data<<std::endl;
        bq->Equeue(data);    //把数据入进去
        data++;
    }
}

int main()
{
    //扩展：阻塞队列：阻塞队列不是只能放整数，可以放任务！！！

    //申请阻塞队列
    BlockQueue<int> *bq = new BlockQueue<int>();

    //构建生产和消费者
    pthread_t c,p;

    pthread_create(&c,nullptr,consumer,bq);
    pthread_create(&p,nullptr,productor,bq);

    pthread_join(c,nullptr);
    pthread_join(p,nullptr);



    return 0;
}
